package com.br.servlets;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.json.JSONException;
import org.json.JSONObject;

import com.br.dao.SalasDao;
import com.br.model.Jogador;
import com.br.model.Sala;
import com.br.util.StopUtils;

@WebServlet(value = "/SairSala")
public class SairSala extends HttpServlet {

	private static final long serialVersionUID = 1L;
	
	private static Logger logger = LogManager.getLogger(SairSala.class.getName());

	protected void service(HttpServletRequest req, HttpServletResponse res)
			throws ServletException, IOException {

		Jogador eu = (Jogador) req.getSession(true).getAttribute("jogador");
		if(eu == null){
			logger.debug("Sessao nao iniciada!");
			return;
		}
		
		logger.debug("INIT "+StopUtils.logAllParameters(req));
		
		String salaId = req.getParameter("uid");
		String myid = eu.getUid();

		JSONObject response = new JSONObject();

		try {
			if (StopUtils.notEmpty(myid) && StopUtils.notEmpty(salaId)) {
				SalasDao dao = new SalasDao();
				
				//me remove da lista de jogadores
				Sala sala = dao.get(salaId);
				for (int i = 0; i < sala.getJogadores().size(); i++) {
					Jogador j = sala.getJogadores().get(i);
					if (j.getUid().equals(myid)) {
						sala.getJogadores().remove(i);
						break;
					}
				}
				
				//se a sala nao tiver mais jogadores, fecha-la
				if(sala.getJogadores().size() == 0){
					dao.remove(salaId);
				}else{ 
				//se nao adiciona o primeiro jogador da lista como dono da sala
					sala.setDono(sala.getJogadores().get(0));
					dao.update(sala);
				}
				
				response.put("error", false);
			} else {
				response.put("error", true);
				response.put("errorMsg", "Campos enviados inválidos.");
			}

		} catch (JSONException e) {
			logger.error("Erro JSON", e);
		}

		// retorna o json
		res.setCharacterEncoding("UTF-8");
		res.setContentType("application/json");
		res.getOutputStream().write(response.toString().getBytes());
		res.getOutputStream().flush();
		
		logger.debug("END "+response.toString());
	}

}
